tickets:
  - id: t1
    ticket: Record every declined charge in payment_attempts so support can see it
    kind: build
    context: "[Order Placement](</Flows/Order Placement/Order Placement.md>) a1 ·
      [payment_attempts](</Data/main/Tables/payment_attempts.md>)"
    depends: —
    implemented: repo://payments/src/charges.ts
    gap: —
    owner: "[Nadia Ilic](</Team/Nadia Ilic.md>)"
    tests: test://payments/declines.test.ts
    uuid: 6ad4db0c-93a2-4859-b633-72f71f6e3e14
  - id: t2
    ticket: Hide the retry affordance on hard declines
    kind: build
    context: "[Declined Payment Path](</Flows/Order Placement/Declined Payment
      Path.md>) f2/q1"
    depends: —
    implemented: repo://storefront/src/pages/checkout.tsx
    gap: fraud codes still render the retry button — the decision in q1 is made, the
      branch is not
    owner: "[Nadia Ilic](</Team/Nadia Ilic.md>)"
    tests: —
    uuid: 134c0559-f060-4388-9754-bf795e7669ab
  - id: t3
    ticket: "End-to-end proof: a declined charge is audited and offers no retry"
    kind: test
    context: "[Declined Payment Path](</Flows/Order Placement/Declined Payment
      Path.md>) s2"
    depends: t1, t2
    implemented: —
    gap: no test drives the hard-decline path yet
    owner: —
    tests: —
    uuid: bd7cbd35-d4c9-4576-befe-49b792c7d6f4
open-questions:
  - q: q1
    question: Should t3 also cover the soft-decline retry, or is that already
      covered by the charges test?
    about: t3
    status: open
    options: "Cover both in one spec (Recommended) :: one scenario file for the
      decline family keeps the paths beside each other; Leave soft declines to
      the unit test :: less duplication, but the flow's s1 then has no
      end-to-end proof"
    uuid: a22de76e-ea12-4c5b-8829-c60c736958b0
    resolution: ""
    owner: ""
